//菜单数据
const router = require('koa-router')()
const Menu = require('../model/menuSchema.js')
const utils = require('../utils/utils.js')
//设置路由前缀
router.prefix('/menus')

//列表渲染 get 上传 POST 修改PUT或者POST 删除delete或者POST  RESTFUL风格语法
//如果是POST请求 获取前端发送的参数 ctx.request.body
//如果是GET请求 获取前端发送的参数 ctx.request.query
//ctx.body是返回给前端的数据
//方法的后面 第一个参数都是查询条件 第二个参数基本上都是返回条件
//{userPwd:0} 作为返回条件 0代表不返回  1代表返回 {}或者null代表全部返回 'userName userEmail'代表挑选返回
//$inc 自增加  $or或者  $in包含   $all所有




//菜单列表查询渲染
router.get('/list', async (ctx) => {
    //解构出前端发送过来的数据
    let { menuName, menuState } = ctx.request.query
    try {
        let params = {};
        if (menuName) params.menuName = { $regex: menuName };//$regex 正则表达式模糊查询
        if (menuState) params.menuState = menuState;
        // find方法查询所有数据      lean() 将查询结果转换为普通的 JavaScript 对象，而不是 Mongoose 文档对象
        let rootList = await Menu.find(params).lean()
        //处理时间格式
        rootList.forEach(item => {
            item.updateTime = item.updateTime.toLocaleString()
        })
        //用封装的方法转换成树形结构
        let res = utils.TreeMenuList(rootList)
        //返回给前端
        ctx.body = utils.success(res)
    } catch (error) {
        console.log(error);
    }
})
//菜单列表创建/新增/编辑
router.post('/operate', async (ctx) => {
    let params = ctx.request.body
    let { menuName, active, _id } = params
    try {
        //判断是否创建
        if (active === 'create') {
            //验证菜单名是否填写
            if (!menuName) {
                ctx.body = utils.fail('菜单名不能为空')
                return
            }
            //判断菜单名是否存在
            let res = await Menu.findOne({ $or: [{ menuName }] }, 'menuName _id')
            if (res) {
                ctx.body = utils.fail('菜单已存在')
                return
            } else {
                //创建菜单
                let res = await Menu.create(params)
                ctx.body = utils.success("创建成功")
            }
        } else if (active === 'add') {
            //新增菜单
            let res = await Menu.create(params)
            ctx.body = utils.success("新增成功")
        } else {
            //编辑菜单  findOneAndUpdate()查找并更新单个文档  第一个参数查找,第二个参数更新,第三个参数返回
            let res = await Menu.findOneAndUpdate({ _id }, params)
            ctx.body = utils.success('更新成功')
        }
    } catch (error) {
        console.log(error);
    }
})
//菜单列表删除/批量删除
router.post('/delete', async (ctx) => {
    //解构出前端发送过来的数据
    let _id = ctx.request.body
    try {
        //删除  findByIdAndDelete() 根据指定 ID 查找并删除文档   但不会删除child子元素 
        let res = await Menu.findByIdAndDelete(_id)
        //deleteMany() 删除多个文档     $all查询匹配数组中包含所有指定元素的文档
        await Menu.deleteMany({ parentId: { $all: _id } })
        ctx.body = utils.success(`删除成功`)
    } catch (error) {
        console.log(error);
    }
})






module.exports = router
